const authorizationServer = require('koa-oauth2-jwt') // 这个是我自己封装的中间件
const {DigestUtils} = require('node-util') // 这个是我自己封装的工具包

module.exports = app => {
  return authorizationServer({
    debug: false,
    // 生成token时用来加密的密钥
    secret: "test",
    // 配置已授权的客户端信息，这里的clientId和clientSecret其实对应的就是前端的appId和appSecret
    clients: [
      {
        clientId: 'ioss00038f048fc8892a0a1',
        clientSecret: '8c25f582a683458391e06062b69e225d',
        scopes: ['all']
      }
    ],
    // 访问令牌有效期（秒），我这里配置15分钟
    accessTokenValiditySeconds: 60 * 15,
    // 刷新令牌有效期（秒），我这里配置2小时
    refreshTokenValiditySeconds: 60 * 60 * 2,
    // 这个函数是 grant_type 为 password 时，用于认证用户的，我这里就简单模拟了数据库查询
    // grant_type 为 refresh_token的处理已经封装好了，无特殊要求不用开发者去实现
    loadUserByUsername(username) {
      const db = [{
        id: 1,
        username: 'czl',
        password: DigestUtils.md5Hex('leo666999')
      }]
      let user = db.find(item => item.username === username)
      return !user ? null : {
        data: { id: user.id, username: user.username },
        password: user.password
      }
    }
  }, app)
}